package com.test.lock;

/**
 * Object中 wait 和 notify
 *
 * Object中的wait、notify、notifyAll用于线程等待和唤醒的方法，都必须在Synchronized内部执行，必须用到关键字Synchronized
  先wait后notify，notifyAll方法，等待中的线程才能被唤醒，否则无法唤醒
   wait和notify必须成对出现
 */
public class ObjectLockDemo {

    static Object objectLock = new Object();

    public static void main(String[] args) {

        new Thread(()->{
            synchronized (objectLock){
                System.out.println(Thread.currentThread().getName()+"\t"+"----------come in");
                try {
                    objectLock.wait();
                }catch (Exception e){
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"\t"+"--------被唤醒");
            }
        },"A").start();

        new Thread(()->{
            synchronized (objectLock){
                objectLock.notify();
                System.out.println(Thread.currentThread().getName()+"\t"+"------通知");
            }
        },"B").start();
    }

}
